// HTTP请求基础封装
const baseURL = 'http://localhost:8081';
/**
 * 通用请求函数
 * @param {string} url - 请求地址
 * @param {string} method - 请求方法 GET/POST/PUT/DELETE
 * @param {object} data - 请求数据
 * @param {object} header - 请求头
 * @param {object} params - 查询参数
 * @returns {Promise}
 */
export const request = ({
  url,
  method,
  data,
  header,
  responseType
}) => {
  // 默认请求头
  const defaultHeader = {
    'Content-Type': 'application/json',
    // 自动添加token
    'Authorization': (() => {
      const token = uni.getStorageSync('token');
      return token ? `Bearer ${token}` : ''
    })()
  };

  return new Promise((resolve, reject) => {
    uni.request({
      url: `${baseURL}${url}`,
      method,
      data,
      header: {
        ...defaultHeader,
        ...header
      },
      timeout: 10000,
      responseType,
      success: (res) => {
        // 处理 blob 类型响应
        if (responseType === 'blob') {
          if (res.statusCode === 200) {
            resolve(res.data);
          } else {
            reject(new Error(`请求错误: ${res.statusCode}`));
          }
          return;
        }
        // // 统一响应处理
        if (res.statusCode === 200) {
          //   if (res.data.code == 200) {
          //     console.log("登录成功")
          resolve(res.data);
          //   } else if (res.data.code === 401) {
          //     // 未授权，清除token并重新登录
          //     uni.removeStorageSync('token');
          //     uni.removeStorageSync('userInfo');
          //     //等授权完
          //     setTimeout(() => {
          //       uni.navigateTo({
          //         url: '/pages/work/index'
          //       })
          //     }, 1500)
          //     reject(res.data);
        } else {
          reject(res.data);
          //   }
        }
      }
    });
  });
};

// 便捷请求方法
export const http = {
  get: (url, data = {}, header = {}, responseType) => request({
    url,
    method: 'GET',
    data,
    header,
    responseType
  }),
  post: (url, data = {}, header = {}) => request({
    url,
    method: 'POST',
    data,
    header
  }),
  put: (url, data = {}, header = {}) => request({
    url,
    method: 'PUT',
    data,
    header
  }),
  delete: (url, data = {}, header = {}) => request({
    url,
    method: 'DELETE',
    data,
    header
  })
};
export default http;
export {
  baseURL
}